import store from '@/store'
import {
	msg,
	getAuthToken
} from './util'

 // const BASE_URL = 'http://192.168.31.128:48080';
// const BASE_URL = 'http://192.168.31.132:48080'
const BASE_URL = 'http://47.93.178.168:48080'
// const BASE_URL = 'https://safe.htkqy.com'
//const BASE_URL = 'http://127.0.0.1:48080'

function resultFilter(res) {
	if (typeof(res) == 'undefined' || typeof(res[1]) == 'undefined') {
		return null;
	}
	res = res[1];

	if (typeof(res) == 'undefined' || res.statusCode != 200) {
		msg('请求失败，请重试');
		return null;
	}
	if (typeof(res.data) == 'string') {
		res.data = JSON.parse(res.data);
	} else if (typeof(res.data) == 'function') {
		// Array function

	} else if (typeof(res.data) == 'object') {
		//{} []
	}

	const code = res.data.code;
	if (code == 401) {
		// Token 过期
		return null;
	}
	// 系统异常
	if (code == 500) {
		msg('系统异常，请稍后重试');
		return null;
	}
	// beContinued
	return res;

}

function request(options) {
	return new Promise((resolve, reject) => {
		// 发起请求
		const authToken = getAuthToken();
		uni.request({
			url: BASE_URL + options.url,
			method: options.method || 'GET',
			data: options.data || {},
			header: {
				...options.header,
				'Authorization': authToken ? `Bearer ${authToken}` : '',
				'tenant-id': '1'
			}
		}).then(res => {
            res=resultFilter(res);
			if (!res) {
				return;
			}

			const code = res.data.code;
			const message = res.data.msg;
			// 其它失败情况
			if (code > 0) {
				msg(message);
				// 提供 code + msg，可以基��code 做进一步的处理。一般情况下不需要��
				// 不需要场景：手机登录，密码不正确时；
				// 需要场景：微信登录，未绑定手机时，后端返回一��code 码，前端基于它跳转到绑定手机界面��
				reject({
					'code': code,
					'msg': message
				});
				return;
			}

			// 处理成功，只返回成功 data 数据，不返回 code ��msg
			resolve(res.data.data);
		}).catch((err) => {
			reject(err);
		})
	})
}

function requestDetail(options) {
	return new Promise((resolve, reject) => {
		// 发起请求
		const authToken = getAuthToken();
		uni.request({
			url: BASE_URL + options.url,
			method: options.method || 'GET',
			data: options.data || {},
			header: {
				...options.header,
				'Authorization': authToken ? `Bearer ${authToken}` : '',
				'tenant-id': '1'
			}
		}).then(res => {
			res=resultFilter(res);
			if (!res) {
				return;
			}
			// 其它失败情况
			const code = res.data.code;
			const message = res.data.msg;

			if (code > 0) {
				msg(message);
				// 提供 code + msg，可以基��code 做进一步的处理。当然，一般情况下是不需要的��
				// 不需要的场景：手机登录时，密码不正确��
				// 需要的场景：微信登录时，未绑定手机，后端会返回一��code 码，前端需要基于它跳转到绑定手机界面；
				reject({
					'code': code,
					'msg': message
				});
				return;
			}
			// 处理成功，则只返回成功的 data 数据，不返回 code ��msg

			resolve(res.data);
		}).catch((err) => {
			reject(err);
		})
	})
}

// 自动登录 跳过 token
function requestAnoaymous(options) {
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASE_URL + options.url,
			method: options.method || 'GET',
			data: options.data || {},
			header: {
				...options.header,
				'Authorization': '',
				'tenant-id': '1'
			}
		}).then(res => {
			res=resultFilter(res);
			if (!res) {
				return;
			}
			// 其它失败情况
			const code = res.data.code;
			const message = res.data.msg;
			if (res.data.code > 0) {
				msg(message);
				// 提供 code + msg，可以基��code 做进一步的处理。当然，一般情况下是不需要的��
				// 不需要的场景：手机登录时，密码不正确��
				// 需要的场景：微信登录时，未绑定手机，后端会返回一��code 码，前端需要基于它跳转到绑定手机界面；
				reject({
					'code': code,
					'msg': message
				});
				return;
			}
			// 处理成功，则只返回成功的 data 数据，不返回 code ��msg
			resolve(res.data);
		}).catch((err) => {
			reject(err);
		})
	})
}

function requestFile(options) {
	return new Promise((resolve, reject) => {
		// 发起请求
		const authToken = getAuthToken();
		uni.request({
			url: `${BASE_URL}/admin-api/infra/oss/uploadBase64`,
			method: 'post',
			header: {
				'Authorization': authToken ? `Bearer ${authToken}` : '',
				'tenant-id': '1',
				'content-type': "application/x-www-form-urlencoded",
				//'content-type': 'multipart/form-data; boundary=Multipart Boundary',
				//'content-type': 'application/octet-stream; boundary=Multipart Boundary',getInputStream()
			},
			data: options.data || {}
            //formdata:options.data

		}).then(res => {
			res=resultFilter(res);
			if (!res) {
				return;
			}
			if (res.data.code == 0) {
				// 处理成功，则只返回成功的 data 数据，不返回 code ��msg
				resolve(res.data.data);
			}
		}).catch((err) => {
			reject(err);
		})
	})
}

function upload(filepath, formdata) {
	// filepath:文件地址
	// formdata:表单元素
	// 配置上传策略��
	return new Promise((resolve, reject) => {

		const authToken = getAuthToken();
		uni.uploadFile({
				url: `${BASE_URL}/admin-api/infra/oss/upload`,
				filePath: filepath,
				name: 'file',
				// file:res.tempFiles[i],
				// fileType:res.tempFiles[i].type,
				header: {
					'Authorization': authToken ? `Bearer ${authToken}` : '',
					'tenant-id': '1'
				},
				formData: {
					//'key':formdata.data.key,
					// 'x-cos-security-token':'',
					//'q-sign-algorithm': 'sha1',
					//'q-ak': formdata.data['q-ak'],
					//'q-key-time': formdata.data['q-key-time'],
					//'q-signature': formdata.data['q-signature'],
					//'policy': formdata.data.policy,
					'Content-Type': 'multipart/form-data; boundary=Multipart Boundary'
				}
			})
			.then(res => {
				// res.data= "{
				// 	  "code":0,
				// 	  "data":{
				//	    "originalName":"VFjJbwjP3Zr81ec86e2c850c45f3155b4d3ca63828e0.jpg",
				//       "fileName":"2022/04/20/15c918afe28e400b874156f12689b238.jpg",
				//      "id":"430",
				//      "url":"http://192.168.31.201:9000/safe-production/2022/04/20/15c918afe28e400b874156f12689b238.jpg"
				//    },
				// 	  "msg":""
				// }"
				res=resultFilter(res);
				if (!res) {
					return;
				}

				const code = res.data.code;
				const message = res.data.msg;
				// 其它失败情况
				if (code > 0) {
					msg(message);
					// 提供 code + msg，可以基��code 做进一步的处理。当然，一般情况下是不需要的��
					// 不需要的场景：手机登录时，密码不正确��
					// 需要的场景：微信登录时，未绑定手机，后端会返回一��code 码，前端需要基于它跳转到绑定手机界面；
					reject({
						'code': code,
						'msg': message
					});
					return;
				}


				if (code == 0) {
					// 处理成功，则只返回成功的 data 数据��
					// 不返��code ��msg
					resolve(res.data.data);
					return;
				} else {
					reject({
						'code': code,
						'msg': message
					});
				}
			}).catch((err) => {
				reject(err);
			})
	})
}

module.exports = {
	requestAnoaymous,
	request,
	requestDetail,
	upload,
	requestFile
}
